import cv2
import numpy as np

if __name__ == '__main__':
    # 读取图像,直接使用参数cv2.IMREAD_GRAYSCALE来读取灰度图像
    gray = cv2.imread('bookpage.jpg',cv2.IMREAD_GRAYSCALE)

    # 阈值化处理，第一个参数是输入图像，第二个参数是阈值，第三个参数是最大灰度值，
    ret,binary = cv2.threshold(gray,10,255,cv2.THRESH_BINARY)

    # 使用自适应阈值化处理，第一个参数是输入图像，第二个参数是最大灰度值，第三个参数是自适应方法，第四个参数是阈值类型，第五个参数是块大小，第六个参数是常数C
    binary_adaptive = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,115,1)

    # 使用OTSU算法进行阈值化处理，第一个参数是输入图像，第二个参数是最大灰度值，第三个参数是阈值类型，第四个参数是阈值类型，第五个参数是阈值
    ret_otsu,otsu = cv2.threshold(gray,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
    print('OTSU threshold:',ret_otsu)

    # 显示图像
    cv2.imshow('gray', gray)
    cv2.imshow('binary', binary)
    cv2.imshow('binary_adaptive', binary_adaptive)
    cv2.imshow('otsu', otsu)

    # 等待按键
    if cv2.waitKey(0) & 0xFF == ord('q'):
        cv2.destroyAllWindows()

    # 退出程序
    exit(0)